Skip to content

Prompt Engineering ​

标签
AI/agent/Prompt
字数
3715 字
阅读时间
15 分钟

这条技术线最早的一层:管单条提示怎么写。

后面还有两层叠在它上面:Context Engineering 管一次调用的全部输入怎么组装,Harness Engineering 管工具、权限、验证、状态这些跨轮次生效的东西。三层不是互相替代——单步任务输出含糊改提示,答错方向缺背景调输入组装,多步任务反复崩溃说明问题根本不在提示这一层。完整的对比与诊断判据见 Harness 那篇。

对智能体来说,提示还多一层作用:多智能体之间的分工协作效率,直接由提示设计决定。

三层各管一段,不是互相替代。

   ┌─────────────────────────────────────────────────────────┐
   │ Prompt Engineering    管单条提示怎么写                     │
   │   样本数量 / 思维链 / 角色扮演 / 输出格式约束                │
   └─────────────────────────────────────────────────────────┘
   ┌─────────────────────────────────────────────────────────┐
   │ Context Engineering   管一次调用的全部输入怎么组装          │
   │   系统提示 / 历史 / 检索结果 / 工具定义 / 记忆              │
   │   └─ 它们要抢同一个 token 预算                            │
   └─────────────────────────────────────────────────────────┘
   ┌─────────────────────────────────────────────────────────┐
   │ Harness Engineering   管跨轮次生效的东西                   │
   │   工具 / 权限 / 验证 / 状态                               │
   └─────────────────────────────────────────────────────────┘

诊断判据 —— 哪一层出问题,看症状
   单步任务输出含糊     ──▶ 改提示
   答错方向、缺背景      ──▶ 调输入组装
   多步任务反复崩溃      ──▶ 问题根本不在提示这一层

对智能体来说提示还多一层作用:多智能体之间的分工协作效率,
直接由提示设计决定。

样本数量:零样本 / 单样本 / 少样本 ​

按给模型提供示例(Exemplar)的数量划分。以情感分类为例:

零样本(Zero-shot) —— 不给任何示例,直接下指令。依赖预训练后的泛化能力。

文本:Datawhale的AI Agent课程非常棒!
情感:正面

单样本(One-shot) —— 给一个完整的「问题-答案」对作示范,模型模仿格式补全新样本。

文本:这家餐厅的服务太慢了。
情感:负面

文本:Datawhale的AI Agent课程非常棒!
情感:

少样本(Few-shot) —— 给多个示例,覆盖不同情况,帮助模型理解任务的细节、边界和细微差别。

样本数的收益不是线性的:该文里 CoT 用 8-shot;而 Zero-Shot CoT 证明了某些任务上零示例配一句触发语就能拿到大部分收益。

思维链:这一层最重要的一个发现 ​

CoT(Chain-of-Thought) 的做法很朴素:在示例里不只给答案,还给出中间的推理步骤。原本是 (问题 → 答案),改成 (问题 → 分步推理 → 答案)。

Wei, J., et al. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903, NeurIPS 2022

为什么它有效:草稿纸机制 ​

CoT 把一个多步预测转换成一连串更简单的「下一个 token」预测,每一步都以上一步的推理为条件。生成的文本充当「工作记忆」——模型把中间结果存进输出流,而不是依赖内部表示跨多层注意力去保持它们。

换成另一种说法:标准提示要求模型在固定的网络深度内完成从问题到答案的转换,这是一个瓶颈;CoT 把计算量摊到了生成的每个阶段(token-compute allocation)。

这是理解 CoT 全部性质的钥匙——包括它为什么在规模不够时反而有害(下面会讲)。

CoT 有效的原因:它把计算量摊到了生成的每一步。

标准提示(问题 → 答案)
   问题
     │
     ▼
   ┌───────────────────────────────────────────┐
   │ 在固定的网络深度内完成全部转换               │
   │ └─ 这是个瓶颈:层数定了,可用计算量就定了      │
   └───────────────────────────────────────────┘
     │
     ▼
   答案

CoT(问题 → 分步推理 → 答案)
   问题
     │
     ▼
   第 1 步「下一个 token」预测,以上一步的推理为条件
     │
     ▼
   第 2 步 …
     │
     ▼
   …
     │
     ▼
   答案

   └─ 生成的文本充当「工作记忆」:模型把中间结果存进输出流,
      而不必依赖内部表示跨多层注意力去保持它们
   └─ 一个多步预测被转换成一连串更简单的「下一个 token」预测

这是理解 CoT 全部性质的钥匙 —— 包括它为什么在规模不够时反而有害:
   推理链要求模型在生成的文本里做组合运算,既需要足够的语言能力,
   也需要正确执行中间计算的能力。
   规模不够时它写得像在推理,但算不对 —— 多出来的步骤只是多了出错的地方。

原始数据(PaLM 540B,8-shot) ​

数据集类型Standard8-shot CoT增益
GSM8K数学17.9%56.9%+39 pp
SVAMP数学69.4%79.0%+9.6 pp
StrategyQA常识68.6%77.8%+9.2 pp
CommonsenseQA常识78.1%79.9%+1.8 pp
Last Letter符号,分布外0.0%63.0%+63 pp
Coin Flip符号,分布外54.8%90.2%+35.4 pp

Last Letter 那条最能说明问题:0% → 63%。这是一个分布外的任务——说明 CoT 起作用是因为真的在按步骤算,而不是因为「见过类似的题」。

同时也看出收益极不均匀:GSM8K +39 pp,CommonsenseQA 只有 +1.8 pp。分类清晰、答案直接的任务获益有限。

8-shot CoT 的收益极不均匀(PaLM 540B)。

   GSM8K(数学)               17.9 ──▶ 56.9     +39.0 pp
   Last Letter(符号,分布外)   0.0 ──▶ 63.0     +63.0 pp   ← 最能说明问题
   Coin Flip(符号,分布外)    54.8 ──▶ 90.2     +35.4 pp
   SVAMP(数学)               69.4 ──▶ 79.0      +9.6 pp
   StrategyQA(常识)          68.6 ──▶ 77.8      +9.2 pp
   CommonsenseQA(常识)       78.1 ──▶ 79.9      +1.8 pp
                                            └─ 分类清晰、答案直接的任务获益有限

Last Letter 那条最能说明 CoT 的机制
   0% → 63%。这是一个分布外的任务 —— 说明 CoT 起作用是因为真的在按步骤算,
   而不是因为「见过类似的题」。

零样本 CoT:一句话的力量
   MultiArith     17.7 ──▶ 78.7    +61 pp
   GSM8K          10.4 ──▶ 40.7    +30 pp
   AQuA-RAT       22.4 ──▶ 33.5    +11 pp
   └─ 提示只是末尾追加一句 Let's think step by step.
      结构化推理的潜在能力已经存在于预训练权重里、处于休眠状态,
      需要一句指令偏置把它激活。

Zero-Shot CoT:一句话的力量 ​

Kojima et al. Large Language Models are Zero-Shot Reasoners. NeurIPS 2022

不加任何示例,只在提示末尾追加一句:

Q: [问题] A: Let's think step by step.
数据集零样本零样本 CoT增益
MultiArith17.7%78.7%+61 pp
GSM8K10.4%40.7%+30 pp
AQuA-RAT22.4%33.5%+11 pp

一句话,一个数量级。 这说明结构化推理的潜在能力已经存在于大模型的预训练权重里,只是处休眠状态,需要一句指令偏置把它激活。

Self-Consistency:用采样换准确率 ​

Wang et al. Self-Consistency Improves Chain of Thought Reasoning. ICLR 2023

做法:采样 k 条独立推理路径,对最终答案做多数投票。

采样路径 kGSM8K 准确率算力成本
157.0%1×
1066.9%10×
4074.4%40×

为什么多数投票有效:通向正确答案的推理路径不止一条,但错误推理产生的错误答案更发散——错的方式比对的路径多得多。所以正确答案会形成众数。

代价是线性的:40 条路径就是 40 倍推理算力。这是典型的「用推理期算力换准确率」,只在该任务值得的时候用。

Self-Consistency:准确率随采样数上升,但算力是线性涨。

   准确率
     │                                 ╭──── 74.4%(k = 40)
     │                     ╭───────────╯
     │          ╭──────────╯ 66.9%(k = 10)
     │   ╭──────╯
     │ 57.0%(k = 1)
     └──────────────────────────────────────▶ 采样路径 k
        1            10                40
   算力:1×          10×               40×

   └─ 准确率是次线性的,算力是线性的 ——
      典型的「用推理期算力换准确率」,只在该任务值得的时候用

为什么多数投票有效
   通向正确答案的推理路径不止一条,但错误推理产生的错误答案更发散 ——
   错的方式比对的路径多得多。
   └─ 所以正确答案会形成众数

规模依赖:低于阈值反而有害 ​

这一条最容易被忽略:

模型规模CoT 在 GSM8K 上的收益
~350M负(CoT 比标准提示更差)
~8B极小 / 可忽略
~62B小的正收益
~540B大(+39 pp)

低于约 100B 参数时,CoT 一致地等于或劣于标准提示——模型会生成看似合理但错误的推理链。

用草稿纸机制解释得通:推理链要求模型在生成的文本里做组合运算,这既需要足够的语言能力,也需要正确执行中间计算的能力。规模不够时,它写得像在推理,但算不对——多出来的步骤只是多了出错的地方。

这条和 缩放法则 里的能力涌现是同一件事的两面。

同一条 CoT,换个模型规模就换个结论。

   ~350M    负收益          ← CoT 比标准提示更差
   ~8B      极小 / 可忽略
   ~62B     小的正收益
   ~540B    大(GSM8K 上 +39 pp)

   └─ 低于约 100B 参数时,CoT 一致地等于或劣于标准提示 ——
      模型会生成看似合理但错误的推理链

用草稿纸机制解释得通
   推理链要求模型在生成的文本里做组合运算:既需要足够的语言能力,
   也需要正确执行中间计算的能力。
   规模不够时它写得像在推理,但算不对 —— 多出来的步骤只是多了出错的地方。
   └─ 这一条和缩放法则里的能力涌现,是同一件事的两面

变体全景
   Zero-Shot CoT       仅加一句触发语,无示例
   Few-Shot CoT        2–3 个带推理步骤的示例,让模型模仿结构
   Self-Consistency    采样多条路径 + 多数投票
   Tree of Thoughts    把推理当作树而不是线,只展开高分分支
                       └─ 适合复杂规划与谜题
   ReAct               推理 + 行动,think → act → observe → think again

变体全景 ​

变体做法
Zero-Shot CoT仅加一句触发语,无示例
Few-Shot CoT2–3 个带推理步骤的示例,让模型模仿结构
Self-Consistency采样多条路径 + 多数投票
Tree of Thoughts把推理当作树而不是线,只展开高分分支——适合复杂规划与谜题
ReAct推理 + 行动,think → act → observe → think again 循环,见 03-ReAct

什么时候不该用 CoT ​

很有效效果小(只增加延迟)
数学、逻辑谜题、多步推理、复杂决策、代码调试简单分类、情感分析、摘要、翻译——答案本来就是直接的

2026 年的变化:前沿模型已经自带 reasoning mode(OpenAI o1 系列、Claude 的 extended thinking),CoT 在模型内部自动跑,用户不再需要手写 CoT 提示。注意力从「怎么写 CoT」转向其他提升质量的提示技巧。

指令调优改变了提示的写法 ​

早期的 GPT-3 是文本补全模型:擅长续写,但不一定能理解并执行指令。指令调优(Instruction Tuning) 是用大量「指令-回答」格式数据对预训练模型做进一步微调,调完之后模型能更好地理解并遵循指令。今天常用的 ChatGPT、DeepSeek、Qwen 都是各自家族里经过指令调优的版本。

这个差别直接体现在提示怎么写:

模型类型提示写法
文本补全模型必须用少样本「教会」模型做什么:这是一段将英文翻译成中文的程序。英文:Hello 中文:你好 英文:How are you? 中文:
指令调优模型可以直接下指令:请将下面的英文翻译成中文: How are you?

所以「要不要给示例」这件事,答案取决于模型类型和任务本身,不是一个固定规则。 指令调优模型在简单任务上不需要示例,但复杂格式任务给示例仍然有效。

两个基础技巧 ​

角色扮演(Role-playing) —— 赋予模型一个特定角色,引导它的回答风格、语气和知识范围:

你现在是一位资深的Python编程专家。请解释一下Python中的GIL(全局解释器锁)是什么,要让一个初学者也能听懂。

上下文示例(In-context Example) —— 与少样本提示同源,在处理复杂格式或特定风格任务时特别有效。关键是把输出格式用示例钉死:

我需要你从产品评论中提取产品名称和用户情感。请严格按照下面的JSON格式输出。

评论:这款"星尘"笔记本电脑的屏幕显示效果惊人,但我不太喜欢它的键盘手感。
输出:{"product_name": "星尘笔记本电脑", "sentiment": "混合"}

评论:我刚买的"声动"耳机音质很棒,续航也超出了我的预期!
输出:

CoT 的一个附带价值:可解释性 ​

因为模型把逻辑路径外化到了输出流里,研究者可以定位推理链是在哪一点偏离了真相——是算术错误、幻觉事实,还是逻辑不一致。

这是 03-ReAct 那条「人可以中途编辑 thought 来引导 agent」的基础。 一个把推理藏在内部表示里的模型,没有可插入的观察点。

相关 ​

参考 ​

贡献者 ​

文件历史 ​